export default {
    namespaced: true,
    state: () => ({
        // 每个商品的信息对象包含下面6个属性：goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state
        cart: []
    }),
    mutations: {
        // 定义添加到购物车方法
        addToCart(state, goods) {
            // 判断要添加的商品信息在state数组中是否存在，存在就数量+1，不存在就存储到cart数组中
            const findResult = state.cart.find(item => item.goods_id === goods.goods_id);
            if (!findResult) {
                state.cart.push(goods);
            } else {
                findResult.goods_count++;
            }
            // 调用持久保存的方法
            this.commit('m_cart/saveToStorage');
        },
        // 定义方法把数据保存到本地存储
        saveToStorage(state) {
            uni.setStorageSync('cart', JSON.stringify(state.cart));
        },
        // 定义更新商品选中状态的方法
        updateState(state, goods) {
            // 先查找用户要编辑的当前用户信息状态
            let findResult = state.cart.find(item => item.goods_id === goods.goods_id);
            if (findResult) {
                findResult.goods_state = goods.goods_state;
                // 更新后调用持久保存的方法
                this.commit('m_cart/saveToStorage');
            }
        },
        // 定义更新商品数量的方法
        updateGoodsNum(state, goods) {
            let findResult = state.cart.find(item => item.goods_id === goods.goods_id);
            if (findResult) {
                findResult.goods_count = goods.goods_count;
                // 更新后调用持久保存的方法
                this.commit('m_cart/saveToStorage');
            }
        },
        // 删除购物车中的商品
        delGoodsHandle(state, goods) {
            let index = state.cart.findIndex(item => item.goods_id === goods.goods_id);
            if (index !== -1) {
                state.cart.splice(index, 1);
                // 更新后调用持久保存的方法
                this.commit('m_cart/saveToStorage');
            }
        },
        // 设置购物车数据
        setCart(state, cart) {
            state.cart = cart;
        },
        // 更新小复选框状态
        updateAllCheck(state,newState){
            state.cart.forEach(item=>{
                item.goods_state=newState
            })
            // 持久化保存更新状态
            this.commit('m_cart/saveToStorage')
        }
    },
    actions: {
        loadCartFromStorage({ commit }) {
            const cart = JSON.parse(uni.getStorageSync('cart') || '[]');
            commit('setCart', cart);
        }
    },
    getters: {
        total(state) {
            let count = 0;
            state.cart.forEach(item => {
                count += item.goods_count;
            });
            return count;
        },
        // 动态计算选中商品的总件数
        checkedCount(state){
            return state.cart.filter(a=>a.goods_state).reduce((total,item)=>{
                return total+=item.goods_count
            },0)
        },
        // 动态计算选中商品的总价格
        checkedTotalPrice(state){
            return state.cart.filter(item=>item.goods_state).reduce((total,item)=>total+=item.goods_count*item.goods_price,0).toFixed(2)
        }
    }
};
